ユーザデータを利用して、Windowsインスタンスの時刻を東京標準時に設定する
はじめに
AWSチームのすずきです。
AWSが提供するAMIを利用して起動したWindowsインスタンス、デフォルトではOSのタイムゾーンはUTCとなります。
このタイムゾーンを東京標準時に変更する設定方法については下記の記事にて紹介されていますが、 今回、Ec2インスタンスの起動時にユーザデータ(UserData)を指定し、Windowsインスタンスの時刻を東京標準時に 設定する機会がありましたので、紹介させて頂きます。
環境
今回AWS公式が東京リージョンで提供していた以下のAMIを利用し、動作確認を実施しました。
- Windows_Server-2012-R2_RTM-Japanese-64Bit-Base-2017.04.12 - ami-fdcce49a
- Windows_Server-2016-English-Full-Containers-2017.04.12 (ami-1e1f3d79)
2017現在AWSからの提供は終了していますが、Windows Server 2008、2008 R2 用として2013年2月22日以前に提供されていたAMIを利用する場合には、別途Hotfixの適用が必要となる点はご注意ください。
設定方法
AWSコンソール(Ec2)
「ステップ 3: インスタンスの詳細の設定」より「高度な詳細」を開き、ユーザデータの指定を行います。
- ユーザデータの設定内容(テキスト)
<powershell> tzutil /s "Tokyo Standard Time" reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /d 1 /t REG_DWORD /f </powershell>
CloudFormation
CloudFormationテンプレート、YAML表記のサンプルです。
Parameters: Ec2InstanceKeyName: Description: EC2 SSH KEY Type: AWS::EC2::KeyPair::KeyName Ec2InstanceType: Description: EC2 InstanceType Type: String Default: t2.small Ec2ImageId: Description: EC2 ImageID(AMI) Type: String Default: ami-fdcce49a # Windows_Server-2012-R2_RTM-Japanese-64Bit-Base-2017.04.12 - ami-fdcce49a VpcSubnetId: Description: VPC subnet ID Type: AWS::EC2::Subnet::Id Resources: Ec2Instance: Type: AWS::EC2::Instance Properties: InstanceType: !Ref 'Ec2InstanceType' KeyName: !Ref 'Ec2InstanceKeyName' SubnetId: !Ref 'VpcSubnetId' ImageId: !Ref 'Ec2ImageId' UserData: Fn::Base64: !Sub | <powershell> tzutil /s "Tokyo Standard Time" reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /d 1 /t REG_DWORD /f </powershell>
確認
AWSコンソールで起動したEC2を指定し、EC2インスタンスのスクリーンショットにて、OS時刻が東京時間である事を確認できました。
Windows2012R2
Windows2016
まとめ
OSのタイムゾーン指定に設定漏れが合った場合、アプリの動作不良を招いたり、 複数のシステムを跨ぐログ調査が必要な場合の妨げとなるなどの問題が生じる事があります。
ユーザデータを利用する事で、Windows インスタンス時刻を設定が実現できますので、 EC2で起動したWindowsサーバのタイムゾーンを変更する機会がありましたら、今回の手順をお試しください。